// 1228. [进制字符串]二进制最长连续数字
// https://oj.rnd.huawei.com/problems/1228/details
// 注意首尾部的0和1,首部,尾部
//给定一个整数 n ，查找其二进制表示中最长的连续数字0或1的个数。
//注：二进制表示无须在高位补 0 。
//输入一个整数 n ，取值范围 [0, 2^32) 。
//输出一个整数，表示最长连续数字的个数。
//输入 3
//输出 2
// 3的二进制表示为11，最长连续数字为 11，个数为2。
//输入 17
//输出 3
// 17的二进制表示为10001，最长连续数字为 000，个数为3。
//输入 0
//输出 1
// 0的二进制表示为0，最长连续数字的个数为1。
#include <string.h>

#include <algorithm>
#include <bitset>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;

//#define DEBUG
#ifdef DEBUG
#define PF(...) printf(__VA_ARGS__)
#else
#define PF(...)
#endif

#include <iostream>
using namespace std;

class Solution {
 public:
  // 待实现函数，在此函数中填入答题代码
  int GetLongestNum(long num) {
    bitset<32> bt(num);
    string strNum = bt.to_string();
    // 注意首部的N  删除前缀0,前缀多余字符, 删除0 earse  [0011]
    size_t iStart = 0;
    while (strNum[iStart++] == '0')
      ;
    if (iStart > 0) strNum = strNum.erase(0, iStart - 1);
    int nMaxN = 1;
    char curN = strNum[0];
    int curCnt = 1;
    PF("%s.%d\n", strNum.c_str(), strNum.length());

    for (size_t i = 1; i < strNum.length(); i++) {
      PF("-%c,%d  ", strNum[i], curCnt);
      if (curN == strNum[i]) {
        curCnt++;
      } else {
        curN = strNum[i];
        nMaxN = max(nMaxN, curCnt);
        curCnt = 1;
      }
    }
    // 注意尾部的N   0000011
    nMaxN = max(nMaxN, curCnt);
    PF("\n");
    return nMaxN;
  }
};

int main() {
  long num;
  cin >> num;
  Solution solu;
  cout << solu.GetLongestNum(num);

  return 0;
}
